package com.tyl.xtk.task;

import com.tyl.xtk.service.FileInfoService;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

/**
 * 文件清理任务
 * 定期清理已被逻辑删除且超过保留天数的文件，或长期未被访问的文件
 */
@Slf4j
@Component
public class FileCleanupTask {

    @Resource
    private FileInfoService fileInfoService;

    @Value("${spring.file.storage-path}")
    private String storagePath;

    @Value("${spring.file.logic-delete-days:7}")
    private int logicDeleteDays;

    @Value("${spring.file.real-delete-days:30}")
    private int realDeleteDay;

    /**
     * 文件清理逻辑：
     * 每天执行一次
     * 先将文件 updateTime 超过 30 天的标记为逻辑删除
     * 如果逻辑删除的文件被访问则恢复(updateTime 更新)，
     * 逻辑删除文件超过 30 天则永久删除
     */
    @Scheduled(cron = "0 0 2 * * ?")
    public void cleanupFiles() {
        // 计算删除截止时间，开始逻辑删除
        log.info("Starting file cleanup task...");
        LocalDateTime cutoffTime = LocalDateTime.now().minusDays(logicDeleteDays);
        boolean d = fileInfoService.deleteFilesBefore(cutoffTime);

        // 获取所有逻辑删除并且已超过 deleteDelayDays 的文件
        LocalDateTime time = LocalDateTime.now().minusDays(realDeleteDay);
        boolean r = fileInfoService.realDeleteBefore(time);

    }
}